<template>
  <!-- 公共导入组件 -->
  <upload-excel :on-success="success" :before-upload="beforeUpload" />
</template>
<script>
import { importEmployeeApi } from '@/api/employees'
export default {
  data() {
    return {
      // 区分究竟是做什么数据的导入
      type: this.$route.query.type
    }
  },
  methods: {
    // 上传并解析成功的处理函数
    async success({ header, results }) {
      if (this.type === 'employees') {
        // console.log(header) // 表头信息
        // console.log(results) // 表格数据
        // 定义一个中英文表头的对应关系
        const userRelations = {
          入职日期: 'timeOfEntry',
          手机号: 'mobile',
          姓名: 'username',
          转正日期: 'correctionTime',
          工号: 'workNumber'
        }
        // 定义新的数组保存处理后的结果
        const arr = []
        results.forEach(item => {
          // 定义空对象保存处理好的单条数据
          const userInfo = {}
          Object.keys(item).forEach(key => {
            // 入职日期和转正日期需要处理
            if (userRelations[key] === 'timeOfEntry' || userRelations[key] === 'correctionTime') {
              userInfo[userRelations[key]] = new Date(this.formatDate(item[key], '-'))
              return
            }
            userInfo[userRelations[key]] = item[key]
          })
          // 将单条数据增加到数组中
          arr.push(userInfo)
        })
        // 调接口
        await importEmployeeApi(arr)
        // 提示信息
        this.$message.success('导入成功')
        // 回退上一个页面中
        this.$router.back()
      } else {
        // 其他业务的导入
      }
    },
    // 上传文件前的校验
    beforeUpload(file) {
      // 允许上传的文件类型
      const allow_types = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
      if (file.type !== allow_types) {
        this.$message.warning('只允许上传.xls或者.xlxs后缀的excel表格')
        return false
      }

      // 文件大小不能超过1M
      const isLt1M = file.size / 1024 / 1024 < 1
      if (!isLt1M) {
        this.$message.warning('最大允许上传的文件大小为1M')
        return false
      }
      return true
    },
    // 将excel处理过的时间日期的数字重新转换为时间日期
    formatDate(numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1)
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() - 1 + ''
      // '/'或者 '-' 2020/12/31 2020-10-12
      if (format && format.length === 1) {
        return year + format + month + format + date
      }
      // 20201121
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    }
  }
}
</script>
